package com.open.demo.matrix

import android.util.Log
import com.open.demo.utils.Constats
import com.tencent.mrs.plugin.IDynamicConfig

/**
 * https://github.com/Tencent/matrix#matrix_android_cn
 * https://github.com/Tencent/matrix/tree/b54b09ae06cc225c1cc9aedc8be39f3db4a2a340/samples/sample-android
 *
 * APK Checker。针对 APK 安装包的分析检测工具，根据一系列设定好的规则，检测 APK 是否存在特定的问题，并输出较为详细的检测结果报告，用于分析排查问题以及版本追踪
 * Resource Canary。基于 WeakReference 的特性和 Square Haha 库开发的 Activity 泄漏和 Bitmap 重复创建检测工具
 * Trace Canary。监控界面流畅性、启动耗时、页面切换耗时、慢函数及卡顿等问题。
 * 分为帧率监控、慢方法监控、ANR监控、启动耗时、主线程优先级检测、IdleHandler耗时检测这6个功能
 *      FrameTracer 帧率监控模块  EvilMethodTracer 慢方法监控模块 LooperAnrTracer 依赖于消息机制的ANR监控模块
 *      SignalAnrTracer 依赖于SIGQUIT信号的ANR监控模块 StartUpTracer 启动耗时模块
 *      ThreadPriorityTracer 检测主线程的优先级的改变，以及设置的timerslack_ns超过50000的情况
 *      IdleHandlerLagTracer 检查IdleHandler的执行时间，若超过2000ms则上报
 * IO Canary。检测文件 IO 问题，包括文件 IO 监控和 Closeable Leak 监控
 * SQLite Lint。按官方最佳实践自动化检测 SQLite 语句的使用质量
 *
 * @Author: hailong.qiu hailong.qiu@xgimi.com
 * @Maintainer: hailong.qiu hailong.qiu@xgimi.com
 * @Date: 2021/11/10
 * @Copyright: 2021 www.xgimi.com Inc. All rights reserved.
 */
class DynamicConfigImplDemo : IDynamicConfig {

    companion object {
        const val TAG = "DynamicConfigImplDemo"
    }

    fun isFPSEnable():Boolean {
        return true
    }

    fun isTraceEnable():Boolean {
        return true;
    }

    fun isMatrixEnable():Boolean {
        return false;
    }

    fun isDumpHprof():Boolean {
        return false;
    }

    override fun get(key: String?, defStr: String?): String {
        Log.d(Constats.TAG, "$TAG get key:$key defStr:$defStr")
        return defStr ?: ""
    }

    override fun get(key: String?, defInt: Int): Int {
        Log.d(Constats.TAG, "$TAG get key:$key defInt:$defInt")
        if (MatrixEnum.clicfg_matrix_resource_max_detect_times.name == key) {
            return 2
        }
        if (MatrixEnum.clicfg_matrix_trace_fps_report_threshold.name == key) {
            return 10000;
        }
        if (MatrixEnum.clicfg_matrix_trace_fps_time_slice.name == key) {
            return 12000;
        }
        return defInt
    }

    override fun get(key: String?, defLong: Long): Long {
        Log.d(Constats.TAG, "$TAG get key:$key defLong:$defLong")
        if (MatrixEnum.clicfg_matrix_trace_fps_report_threshold.name == key) {
            return 10000L
        }
        if (MatrixEnum.clicfg_matrix_resource_detect_interval_millis.name == key) {
            return 2000
        }
        return defLong
    }

    override fun get(key: String?, defBool: Boolean): Boolean {
        Log.d(Constats.TAG, "$TAG get key:$key defBool:$defBool")
        return defBool
    }

    override fun get(key: String?, defFloat: Float): Float {
        Log.d(Constats.TAG, "$TAG get key:$key defFloat:$defFloat")
        return defFloat
    }

}
/*
Trace Canary
FrameTracer 帧率监控模块
EvilMethodTracer 慢方法监控模块
LooperAnrTracer 依赖于消息机制的ANR监控模块
SignalAnrTracer 依赖于SIGQUIT信号的ANR监控模块
StartUpTracer 启动耗时模块
ThreadPriorityTracer 检测主线程的优先级的改变，以及设置的timerslack_ns超过50000的情况
IdleHandlerLagTracer 检查IdleHandler的执行时间，若超过2000ms则上报
 */